package com.zhiche.lisa.bms.utils;

import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

import java.util.Date;
import java.util.Objects;

/**
 * 常用的处理方法
 *
 * @author: linbao
 * @date: 2019-03-29
 */
public class ToolCommonUtils {

    /**
     * 年-月
     */
    public static final String yyyyMM = "yyyy-MM";

    /**
     * 年-月-日
     */
    public static final String yyyyMMdd = "yyyy-MM-dd";

    /**
     * yyyyMMddHHmm
     */
    public static final String yyyyMMddHHmm = "yyyyMMddHHmm";

    /**
     * yyyyMMddHHmmss
     */
    public static final String FORMAT_PARTTEN_ONE = "yyyyMMddHHmmss";

    /**
     * yyyy-MM-dd HH:mm:ss
     */
    public static final String FORMAT_PARTTEN_2 = "yyyy-MM-dd HH:mm:ss";

    /**
     * yyyy/MM/dd HHmmss
     */
    public static final String FORMAT_PARTTEN_3 = "yyyy/MM/dd HH:mm:ss";

    /**
     * yyyy-MM-dd HH:mm:ss.sss
     */
    public static final String FORMAT_PARTTEN_4 = "yyyy-MM-dd HH:mm:ss.sss";

    /**
     * 字符串按照逗号, 分号, 回车进行切割换行
     *
     * @param param
     * @return
     */
    public static String[] getStringByObjectReplace(Object param) {
        if (Objects.isNull(param)) {
            param = "";
        }
        return param.toString().trim().replace(" ", "").split(",|;|\n");
    }

    /**
     * 获取时间当前一天最早的时候
     * 00:00:00
     *
     * @param date
     * @return
     */
    public static Date getStartOfDate(Date date) {
        if (Objects.nonNull(date)) {
            return new DateTime(date).withTimeAtStartOfDay().toDate();
        }
        return null;
    }

    /**
     * 获取一个时间当天的最后时刻
     * 23:59:59
     *
     * @param date
     * @return
     */
    public static Date getEndOfDate(Date date) {
        if (Objects.nonNull(date)) {
            return new DateTime(date).withTimeAtStartOfDay().plusDays(1).plusSeconds(-1).toDate();
        }
        return null;
    }

    /**
     * 获取当前的所在月的第一天
     * yyyy-MM-dd
     *
     * @param date
     * @return
     */
    public static Date getFirstDayOfMonth(Date date) {
        if (Objects.nonNull(date)) {
            return new DateTime(date).dayOfMonth().withMinimumValue().toDate();
        }
        return null;
    }

    /**
     * 获取当前的所在月的最后一天
     * yyyy-MM-dd
     *
     * @param date
     * @return
     */
    public static Date getLastDayOfMonth(Date date) {
        if (Objects.nonNull(date)) {
            return new DateTime(date).dayOfMonth().withMaximumValue().toDate();
        }
        return null;
    }

    /**
     * 时间转日期
     *
     * @param dateStr
     * @param formStr
     * @return
     */
    public static Date getDateByStr(String dateStr, String formStr) {
        if (StringUtils.isNotBlank(dateStr) && StringUtils.isNotBlank(formStr)) {
            DateTimeFormatter format = DateTimeFormat.forPattern(formStr);
            return format.parseDateTime(dateStr).toDate();
        }
        return null;
    }

    /**
     * 日期转时间
     * 默认格式 - yyyy-MM-dd
     *
     * @param date
     * @return
     */
    public static String getDateToStrFormat(Date date) {
        if (Objects.nonNull(date)) {
            return new DateTime(date).toString(yyyyMMdd);
        }
        return null;
    }
}
